home *** CD-ROM | disk | FTP | other *** search
/ Birds of My State or Province 4.5 / eField Guide Viewer.iso / pc / Windows / CR115.cab / promptengine_prompts.js.9A533B9B_3FA1_4FBA_8E12_9905049DFB24 < prev    next >
Encoding:
Text File  |  2008-02-13  |  28.9 KB  |  1,000 lines

  1. //////////////////////////////
  2. // FOR DEBUGGING ONLY
  3. var debug = false;
  4. function dumpFormFields(formName)
  5. {
  6.     theForm = document.forms[formName];
  7.     for ( idx = 0; idx < theForm.elements.length; ++idx )
  8.         alert ( theForm.elements[idx].name + " - " + theForm.elements[idx].value );
  9. }
  10.  
  11. //////////////////////////////
  12. // GLOBAL VAR
  13. var isJava = false;  // do encodeURIComponent for Java only
  14. var promptPrefix = "promptex-";
  15.  
  16. var isNetscape = navigator.appName.indexOf("Netscape") != -1;
  17.  
  18. var LEFT_ARROW_KEY = 37;
  19. var RIGHT_ARROW_KEY = 39;
  20. var ENTER_KEY = 13;
  21.  
  22. ///////////////////////////////
  23. // properly encode prompt values
  24. function promptengine_encodePrompt (prompt)
  25. {
  26.     if (isJava)
  27.     {
  28.         return encodeURIComponent(prompt);
  29.     }
  30.     else
  31.     {
  32.         return promptengine_urlEncode(prompt);
  33.     }
  34. }
  35.  
  36. ////////////////////////////////
  37. // add number, currency, string from dropdown/textbox to list box
  38. // where multiple prompt values are supported
  39. function promptengine_addDiscreteValue (
  40.     form,
  41.     type ,
  42.     promptID)
  43. {
  44.     var widget, obj;
  45.     widget = obj = form[promptID + "DiscreteValue"];
  46.     if ( obj.type && obj.type.toLowerCase() != "text" &&
  47.          obj.type.toLowerCase() != "hidden" && obj.type.toLowerCase() != "password")
  48.     {
  49.         //select box not a textbox
  50.         obj = obj.options[obj.selectedIndex];
  51.     }
  52.     if ( ! promptengine_checkValue ( obj.value, type ) )
  53.     {
  54.         if (widget.focus && widget.type.toLowerCase() != "hidden")
  55.             widget.focus();
  56.         return false;
  57.     }
  58.     promptValue =  obj.value;
  59.     displayString = ( obj.text ) ? obj.text : obj.value;
  60.     promptEntry = new Option(displayString,promptValue,false,false);
  61.     theList = form[promptID + "ListBox"];
  62.     theList.options[theList.length] = promptEntry;
  63.     if (widget.focus && widget.type.toLowerCase() != "hidden" && !widget.disabled)
  64.         widget.focus ();
  65.     if ( widget.select )
  66.         widget.select ();
  67.     if ( widget.type.toLowerCase != "text" &&
  68.      widget.type.toLowerCase != "hidden" &&
  69.      widget.type.toLowerCase != "password")
  70.         if ( widget.selectedIndex < widget.length - 1 )
  71.             widget.selectedIndex = widget.selectedIndex + 1;      //... or move to next selection in listbox
  72. }
  73.  
  74. function promptengine_deselectAllItems(listbox)
  75. {
  76.     for (var i = 0; i < listbox.length; i++)
  77.         listbox.options[i].selected = false;
  78. }
  79.  
  80. function promptengine_addAvailableItem(
  81.     availableList,
  82.     index,
  83.     selectedList)
  84. {
  85.     for (var i = 0; i < selectedList.length; i++)
  86.     {
  87.         if (selectedList.options[i].value == availableList.options[index].value &&
  88.             selectedList.options[i].text == availableList.options[index].text)
  89.         {
  90.             selectedList.options[i].selected = true;
  91.             return false;
  92.         }
  93.     }
  94.  
  95.     var promptEntry = new Option(availableList.options[index].text, availableList.options[index].value, false, true);
  96.     selectedList.options[selectedList.length] = promptEntry;
  97.     return true;
  98. }
  99.  
  100. ////////////////////////////////
  101. // add number, currency, string from available list box to selected list box
  102. // where multiple prompt values are supported
  103. function promptengine_addValueFromPickList(
  104.     form,
  105.     type,
  106.     promptID)
  107. {
  108.     var AvailableList, SelectedList;
  109.     AvailableList = form[promptID + "AvailableList"];
  110.     SelectedList = form[promptID + "ListBox"];
  111.  
  112.     promptengine_deselectAllItems(SelectedList);
  113.  
  114.     var changed = false;
  115.  
  116.     var lastSelected = -1;
  117.     for (var i = 0; i < AvailableList.length; i++)
  118.     {
  119.         if (AvailableList.options[i].selected)
  120.         {
  121.             var added = promptengine_addAvailableItem(AvailableList, i, SelectedList);
  122.             if (added == true)
  123.                 changed = true;
  124.             lastSelected = i;
  125.         }
  126.     }
  127.  
  128.     // set focus to the next item on the available list
  129.     if (lastSelected++ >= 0 && lastSelected < AvailableList.length)
  130.     {
  131.         promptengine_deselectAllItems(AvailableList);
  132.         AvailableList.options[lastSelected].selected = true;
  133.     }
  134.  
  135.     return changed;
  136. }
  137.  
  138. ////////////////////////////////
  139. // add all number, currency, string from available list box to selected list box
  140. // where multiple prompt values are supported
  141. function promptengine_addAllValues(
  142.     form,
  143.     type,
  144.     promptID)
  145. {
  146.     var AvailableList, SelectedList;
  147.     AvailableList = form[promptID + "AvailableList"];
  148.     SelectedList = form[promptID + "ListBox"];
  149.  
  150.     promptengine_deselectAllItems(SelectedList);
  151.  
  152.     var changed = false;
  153.     for (var i = 0; i < AvailableList.length; i++)
  154.     {
  155.         var added = promptengine_addAvailableItem(AvailableList, i, SelectedList);
  156.         if (added == true)
  157.             changed = true;
  158.     }
  159.  
  160.     return changed;
  161. }
  162.  
  163. ////////////////////////////////////
  164. // adds Range prompt to listbox where multiple values are supported
  165. function promptengine_addRangeValue (
  166.     form,
  167.     type ,
  168.     promptID )
  169. {
  170.     var lowerBoundPickList = form[promptID + "SelectLowerRangeValue"];
  171.     var upperBoundPickList = form[promptID + "SelectUpperRangeValue"];
  172.     
  173.     lowerBound = form[promptID + "LowerBound"];
  174.     upperBound = form[promptID + "UpperBound"];
  175.     //handle select box, not text box case
  176.     if ( lowerBound.type.toLowerCase () != "text" &&
  177.      lowerBound.type.toLowerCase () != "hidden" &&
  178.      lowerBound.type.toLowerCase () != "password" )  //either upper or lower, doesn't matter
  179.     {
  180.         lowerBound = lowerBound.options[lowerBound.selectedIndex];
  181.         upperBound = upperBound.options[upperBound.selectedIndex];
  182.     }
  183.  
  184.     lowerUnBounded = form[promptID + "NoLBoundCheck"].checked;
  185.     upperUnBounded = form[promptID + "NoUBoundCheck"].checked;
  186.     lvalue = uvalue = "";
  187.     
  188.     if ( ! lowerUnBounded )
  189.     {
  190.         if ( ! promptengine_checkRangeBoundValue ( lowerBound.value, type ) ) {
  191.             if ( lowerBound.focus && lowerBound.type.toLowerCase () != "hidden")
  192.                 lowerBound.focus ();
  193.             return false;
  194.         }
  195.         lvalue = lowerBound.value;
  196.     }
  197.     if ( ! upperUnBounded )
  198.     {
  199.         if ( ! promptengine_checkRangeBoundValue ( upperBound.value, type ) ) {
  200.             if ( upperBound.focus && upperBound.type.toLowerCase () != "hidden")
  201.                 upperBound.focus ();
  202.             return false;
  203.         }
  204.         uvalue = upperBound.value;
  205.     }
  206.     
  207.     var ldisplay = "";
  208.     var udisplay = "";
  209.     
  210.     var found = false;
  211.     if (lowerBoundPickList != null && lvalue != null && lvalue.length > 0)
  212.     {
  213.         var cItems = lowerBoundPickList.length;
  214.         for (var item = 0; item < cItems; item++)
  215.         {
  216.             var value = lowerBoundPickList.options[item].value;
  217.             if (value != null && value.length > 0 && value == lvalue)
  218.             {
  219.                 ldisplay = lowerBoundPickList.options[item].text;
  220.                 found = true;
  221.                 break;
  222.             }
  223.         }
  224.     }
  225.     if (!found)
  226.         ldisplay = (lowerBound.text && !lowerUnBounded) ? lowerBound.text : lvalue;
  227.         
  228.     found = false;
  229.     if (upperBoundPickList != null && uvalue != null && uvalue.length > 0)
  230.     {
  231.         var cItems = upperBoundPickList.length;
  232.         for (var item = 0; item < cItems; item++)
  233.         {
  234.             var value = upperBoundPickList.options[item].value;
  235.             if (value != null && value == uvalue)
  236.             {
  237.                 udisplay = upperBoundPickList.options[item].text;
  238.                 found = true;
  239.                 break;
  240.             }
  241.         }
  242.     }
  243.     if (!found)
  244.         udisplay = (upperBound.text && !upperUnBounded) ? upperBound.text : uvalue;
  245.  
  246.     lowerChecked = form[promptID + "LowerCheck"].checked;
  247.     upperChecked = form[promptID + "UpperCheck"].checked;
  248.  
  249.     // value for showing in the list box only, no need encode here
  250.     value = ( lowerChecked && ! lowerUnBounded ) ? "[" : "(";
  251.     if ( ! lowerUnBounded ) //unbounded is empty string not quoted empty string (e.g not "_crEMPTY_")
  252.         value += (lvalue);
  253.     value += "_crRANGE_"
  254.     if ( ! upperUnBounded )
  255.         value += (uvalue);
  256.     value += (upperChecked && ! upperUnBounded ) ? "]" : ")";
  257.     if ( debug ) alert (value);
  258.  
  259.     display = ( lowerChecked && ! lowerUnBounded ) ? "[" : "(";
  260.     display += ldisplay;
  261.     display += " .. "
  262.     display += udisplay;
  263.     display += (upperChecked && ! upperUnBounded ) ? "]" : ")";
  264.  
  265.     promptEntry = new Option(display,value,false,false);
  266.     theList = form[promptID + "ListBox"];
  267.     
  268.     // search the list/select box for the new option, if the returned index is -1, i.e., no such option, add it
  269.     // otherwise, highlight that option
  270.     var idx = promptengine_findOptionInList(theList, value);
  271.     if (idx  > -1)
  272.         theList.selectedIndex = idx;
  273.     else
  274.         theList.options[theList.length] = promptEntry;
  275.     
  276.     return true;
  277. }
  278.  
  279. ////////////////////////////////////
  280. // search the given select object for the given option value, and returns its index.
  281. function promptengine_findOptionInList(selectObj, optionValue)
  282. {    
  283.     if (selectObj == null || optionValue == null || optionValue == "")
  284.         return -1;
  285.     
  286.     for (var i = 0; i < selectObj.options.length; i++)
  287.     {
  288.         if (selectObj.options[i].value == optionValue)
  289.             return i;
  290.     }
  291.  
  292.     return -1;    
  293. }
  294.  
  295. ////////////////////////////////////
  296. // disable check boxes / dropdowns / textboxes based on user selection on the range parameters
  297. function promptengine_onNoBoundCheckClicked(
  298.     form,
  299.     promptID,
  300.     lowOrUpBound)
  301. {
  302.     if (lowOrUpBound == 0) {
  303.         if (form[promptID + "NoLBoundCheck"].checked) {
  304.             form[promptID + "NoUBoundCheck"].disabled = true;
  305.             form[promptID + "LowerCheck"].disabled = true;
  306.             form[promptID + "LowerBound"].disabled = true;
  307.             if (form[promptID + "SelectLowerRangeValue"] != null)
  308.                 form[promptID + "SelectLowerRangeValue"].disabled = true;
  309.         }
  310.         else {
  311.             form[promptID + "NoUBoundCheck"].disabled = false;
  312.             form[promptID + "LowerCheck"].disabled = false;
  313.             form[promptID + "LowerBound"].disabled = false;
  314.             if (form[promptID + "SelectLowerRangeValue"] != null)
  315.                 form[promptID + "SelectLowerRangeValue"].disabled = false;
  316.         }
  317.     } else if (lowOrUpBound == 1) {
  318.         if (form[promptID + "NoUBoundCheck"].checked) {
  319.             form[promptID + "NoLBoundCheck"].disabled = true;
  320.             form[promptID + "UpperCheck"].disabled = true;
  321.             form[promptID + "UpperBound"].disabled = true;
  322.             if (form[promptID + "SelectUpperRangeValue"] != null)
  323.                 form[promptID + "SelectUpperRangeValue"].disabled = true;
  324.         } else {
  325.             form[promptID + "NoLBoundCheck"].disabled = false;
  326.             form[promptID + "UpperCheck"].disabled = false;
  327.             form[promptID + "UpperBound"].disabled = false;
  328.             if (form[promptID + "SelectUpperRangeValue"] != null)
  329.                 form[promptID + "SelectUpperRangeValue"].disabled = false;
  330.         }
  331.     }
  332. }
  333.  
  334. ////////////////////////////////////
  335. // disable text boxes / list boxes based on whether setNull is checked
  336. function promptengine_onSetNullCheckClicked(
  337.     form,
  338.     promptID)
  339. {
  340.     if (form[promptID + "NULL"].checked)
  341.     {
  342.         if (form[promptID + "DiscreteValue"] != null)
  343.             form[promptID + "DiscreteValue"].disabled = true;
  344.         if (form[promptID + "SelectValue"] != null)
  345.             form[promptID + "SelectValue"].disabled = true;
  346.     }
  347.     else
  348.     {
  349.         if (form[promptID + "DiscreteValue"] != null)
  350.             form[promptID + "DiscreteValue"].disabled = false;
  351.         if (form[promptID + "SelectValue"] != null)
  352.             form[promptID + "SelectValue"].disabled = false;            
  353.     }
  354. }
  355.  
  356. ////////////////////////////////////
  357. // puts "select" value into text box for an editable prompt which also has defaults
  358. function promptengine_selectValue(
  359.     form,
  360.     selectCtrl,
  361.     textCtrl)
  362. {
  363.     // If no selection, return unchanged.
  364.     if(form[selectCtrl].selectedIndex < 0)
  365.         return false;
  366.  
  367.     selectedOption = form[selectCtrl].options[form[selectCtrl].selectedIndex];
  368.     if (selectedOption.value == null && form[textCtrl].value == null)
  369.         return false;
  370.  
  371.     var changed = true;
  372.     if (selectedOption.value == form[textCtrl].value)
  373.         changed = false;
  374.  
  375.     form[textCtrl].value = selectedOption.value;
  376.     return changed;
  377. }
  378.  
  379. function promptengine_hasValueInTextBox(
  380.     form,
  381.     textboxID)
  382. {
  383.     if (form[textboxID].value == null)
  384.         return false;
  385.     return true;
  386. }
  387.  
  388. /////////////////////////////////////////
  389. // set cascading prompt id into value field.
  390. function promptengine_setCascadingPID(
  391.     form,
  392.     valueID,
  393.     promptID)
  394. {
  395.     valueField = form[valueID];
  396.  
  397.     curVal = valueField.value;
  398.  
  399.     if (curVal.length > 0)
  400.         curVal += "&";
  401.     curVal +=  "cascadingPID" + "=" + promptID;
  402.  
  403.     if ( debug )
  404.         alert (curVal);
  405.  
  406.     valueField.value = curVal;
  407.     return true;
  408. }
  409.  
  410. /////////////////////////////////////////////////
  411. // remove selected values from multi-value prompt
  412. function promptengine_removeValue(
  413.     form,
  414.     promptID)
  415. {
  416.     var lbox = form[promptID + "ListBox"];
  417.     var changed = false;
  418.  
  419.     var lastSelected = -1;
  420.     for ( var idx = 0; idx < lbox.options.length; )
  421.     {
  422.         if ( lbox.options[idx].selected )
  423.         {
  424.             lbox.options[idx] = null;
  425.             changed = true;
  426.             lastSelected = idx;
  427.         }
  428.         else
  429.             idx++;
  430.     }
  431.  
  432.     if (lastSelected >= 0 && lastSelected < lbox.length)
  433.     {
  434.         // highlight the next item
  435.         promptengine_deselectAllItems(lbox);
  436.         lbox.options[lastSelected].selected = true;
  437.     }
  438.     else if (lastSelected == lbox.length && lastSelected > 0)
  439.     {
  440.         // highlight the last item
  441.         promptengine_deselectAllItems(lbox);
  442.         lbox.options[lastSelected - 1].selected = true;
  443.     }
  444.     
  445.     return changed;
  446. }
  447.  
  448. function promptengine_onRemoveValue(
  449.     form,
  450.     promptID)
  451. {
  452.     promptengine_removeValue(form, promptID);
  453. }
  454.  
  455. /////////////////////////////////////////////////
  456. // remove all values from multi-value prompt
  457. function promptengine_removeAllValues(
  458.     form,
  459.     promptID)
  460. {
  461.     var lbox = form[promptID + "ListBox"];
  462.  
  463.     var changed = false;
  464.  
  465.     if (lbox.options.length > 0)
  466.         changed = true;
  467.  
  468.     for ( var idx = 0; idx < lbox.options.length; )
  469.     {
  470.         lbox.options[idx] = null;
  471.     }
  472.  
  473.     return changed;
  474. }
  475.  
  476. function promptengine_onRemoveAllValues(
  477.     form,
  478.     promptID)
  479. {
  480.     promptengine_removeAllValues(form, promptID);
  481. }
  482.  
  483. /////////////////////////////////////
  484. // update hidden value field with encoded value
  485. function promptengine_updateValueField (
  486.     form,
  487.     valueID,
  488.     promptID,
  489.     value)
  490. {
  491.     valueField = form[valueID];
  492.  
  493.     curVal = valueField.value;
  494.  
  495.     if (curVal.length > 0)
  496.         curVal += "&";
  497.     curVal += promptID + "=" + value;
  498.  
  499.     if ( debug )
  500.         alert (curVal);
  501.  
  502.     valueField.value = curVal;
  503.  
  504.     return true;
  505. }
  506.  
  507. ///////////////////////////////////////
  508. // reset hidden value field
  509. function promptengine_resetValueField (
  510.     form,
  511.     valueID)
  512. {
  513.     valueField = form[valueID];
  514.     valueField.value = "";
  515. }
  516.  
  517. /////////////////////////////////////
  518. // sets prompt value into the hidden form field in proper format so that it can be submitted
  519. function promptengine_updateDiscreteValue (
  520.     form,
  521.     valueID,
  522.     promptID,
  523.     type,
  524.     checkValue)
  525. {
  526.     var value = "";
  527.  
  528.     if (form[promptID + "NULL"] != null &&
  529.         form[promptID + "NULL"].checked )
  530.     {
  531.         value = "_crNULL_"; //NULL is a literal for, uhmm.. a NULL
  532.     }
  533.     else
  534.     {
  535.         valueField = form[promptID + "DiscreteValue"];
  536.  
  537.         if (valueField.type.toLowerCase () != "text" &&
  538.             valueField.type.toLowerCase () != "hidden" &&
  539.             valueField.type.toLowerCase () != "password")
  540.         {
  541.             value = valueField.options[valueField.selectedIndex].value;
  542.         }
  543.         else
  544.         {
  545.             value = valueField.value;
  546.         }
  547.  
  548.         if ( checkValue && !promptengine_checkValue ( value, type ) )
  549.         {
  550.             if (valueField.focus && valueField.type.toLowerCase () != "hidden")
  551.                 valueField.focus ();
  552.  
  553.             return false;
  554.         }
  555.         else
  556.         {
  557.             value = promptengine_encodePrompt(value);
  558.         }
  559.     }
  560.  
  561.     return promptengine_updateValueField(form, valueID, promptID, value);
  562. }
  563.  
  564. /////////////////////////////////////
  565. // sets prompt value for a range into the hidden form field in proper format so that it can be submitted
  566. function promptengine_updateRangeValue (
  567.     form,
  568.     valueID,
  569.     promptID,
  570.     type,
  571.     checkValue)
  572. {
  573.     if (form[promptID + "NULL"] != null &&
  574.         form[promptID + "NULL"].checked )
  575.     {
  576.         value = "_crNULL_"; //NULL is a literal for, uhmm.. a NULL
  577.     }
  578.     else
  579.     {
  580.         lowerBound = form[promptID + "LowerBound"];
  581.         upperBound = form[promptID + "UpperBound"];
  582.  
  583.         //handle select box, not text box case
  584.         if (lowerBound.type.toLowerCase () != "text" &&
  585.             lowerBound.type.toLowerCase () != "hidden" &&
  586.             lowerBound.type.toLowerCase () != "password")  //either upper or lower, doesn't matter
  587.         {
  588.             lowerBound = lowerBound.options[lowerBound.selectedIndex];
  589.             upperBound = upperBound.options[upperBound.selectedIndex];
  590.         }
  591.         lowerUnBounded = form[promptID + "NoLBoundCheck"].checked;
  592.         upperUnBounded = form[promptID + "NoUBoundCheck"].checked;
  593.         lowerChecked = form[promptID + "LowerCheck"].checked;
  594.         upperChecked = form[promptID + "UpperCheck"].checked;
  595.         uvalue = lvalue = "";
  596.  
  597.         if ( ! lowerUnBounded )
  598.         {
  599.             if ( checkValue && !promptengine_checkRangeBoundValue ( lowerBound.value, type ) ) {
  600.                 if ( lowerBound.focus && lowerBound.type.toLowerCase () != "hidden")
  601.                     lowerBound.focus();
  602.                 return false;
  603.             }
  604.             lvalue = lowerBound.value;
  605.         }
  606.         if ( ! upperUnBounded )
  607.         {
  608.             if ( checkValue && !promptengine_checkRangeBoundValue ( upperBound.value, type ) ) {
  609.                 if ( upperBound.focus && upperBound.type.toLowerCase () != "hidden")
  610.                     upperBound.focus ();
  611.                 return false;
  612.             }
  613.             uvalue = upperBound.value;
  614.         }
  615.         value = ( lowerChecked && ! lowerUnBounded ) ? "[" : "(";
  616.         if ( ! lowerUnBounded )
  617.             value += promptengine_encodePrompt(lvalue);
  618.         value += "_crRANGE_"
  619.         if ( ! upperUnBounded )
  620.             value += promptengine_encodePrompt(uvalue);
  621.         value += (upperChecked && ! upperUnBounded ) ? "]" : ")";
  622.     }
  623.  
  624.     return promptengine_updateValueField(form, valueID, promptID, value);
  625. }
  626.  
  627. /////////////////////////////////////
  628. // sets prompt value into the hidden form field in proper format so that it can be submitted
  629. function promptengine_updateMultiValue (
  630.     form,
  631.     valueID,
  632.     promptID,
  633.     type,
  634.     checkValue)
  635. {
  636.     values = form[promptID + "ListBox"].options;
  637.     value = "";
  638.  
  639.     if (form[promptID + "NULL"] != null &&
  640.         form[promptID + "NULL"].checked)
  641.     {
  642.         value = "_crNULL_"; //NULL is a literal for, uhmm.. a NULL
  643.     }
  644.     else
  645.     {
  646.         if ( values.length == 0 )
  647.         {
  648.             value = "_crEMPTY_";     //if value is empty, set to empty string
  649.         }
  650.         else
  651.         {
  652.             for ( i = 0; i < values.length; i++ )
  653.             {
  654.                 // first value could be empty string, then chcking value.length != 0 could miss one empty string
  655.                 if ( i != 0 )
  656.                     value += "_crMULT_"
  657.                 value += promptengine_encodePrompt(values[i].value);
  658.             }
  659.         }
  660.     }
  661.  
  662.     //NOTE: we'll always return true as the validation is done before values are added to select box
  663.     return promptengine_updateValueField(form, valueID, promptID, value);
  664. }
  665.  
  666. ///////////////////////////////////////
  667. // check and alert user about any errors based on type of prompt
  668. var regNumber    = /^(\+|-)?((\d+(\.|,|'| |\xA0)?\d*)+|(\d*(\.|,| |\xA0)?\d+)+)$/
  669. var regCurrency  = regNumber;
  670. var regDate  = /^(D|d)(A|a)(T|t)(E|e) *\( *\d{4} *, *(0?[1-9]|1[0-2]) *, *((0?[1-9]|[1-2]\d)|3(0|1)) *\)$/
  671. var regDateTime  = /^(D|d)(A|a)(T|t)(E|e)(T|t)(I|i)(M|m)(E|e) *\( *\d{4} *, *(0?[1-9]|1[0-2]) *, *((0?[1-9]|[1-2]\d)|3(0|1)) *, *([0-1]?\d|2[0-3]) *, *[0-5]?\d *, *[0-5]?\d *\)$/
  672. var regTime  = /^(T|t)(I|i)(M|m)(E|e) *\( *([0-1]?\d|2[0-3]) *, *[0-5]?\d *, *[0-5]?\d *\)$/
  673. var regDateTimeHTML  = /^ *\d{4} *- *(0?[1-9]|1[0-2]) *- *((0?[1-9]|[1-2]\d)|3(0|1)) *  *([0-1]?\d|2[0-3]) *: *[0-5]?\d *: *[0-5]?\d *$/
  674. var regDateHTML  = /^ *\d{4} *- *(0?[1-9]|1[0-2]) *- *((0?[1-9]|[1-2]\d)|3(0|1)) *$/
  675. var regTimeHTML  = /^ *([0-1]?\d|2[0-3]) *: *[0-5]?\d *: *[0-5]?\d *$/
  676.  
  677. function promptengine_checkValue (
  678.     value,
  679.     type )
  680. {
  681.     if (value == null)
  682.         return false;
  683.         
  684.     if (value == "_crNULL_")
  685.         return true;
  686.  
  687.     if ( type == 'n' && ! regNumber.test ( value ) )
  688.     {
  689.         if (value.length > 0)
  690.             alert ( L_BadNumber );
  691.             
  692.         return false;
  693.     }
  694.     else if ( type == 'c' && ! regCurrency.test ( value ) )
  695.     {
  696.         if (value.length > 0)
  697.             alert ( L_BadCurrency );
  698.         return false;
  699.     }
  700.     else if ( type == 'd' && ! regDate.test ( value ) && !regDateHTML.test( value ) )
  701.     {
  702.         if (value.length > 0)
  703.             alert ( L_BadDate );
  704.         return false;
  705.     }
  706.     else if ( type == "dt" && ! regDateTime.test ( value ) && !regDateTimeHTML.test( value ))
  707.     {
  708.         if (value.length > 0)
  709.             alert ( L_BadDateTime );
  710.         return false;
  711.     }
  712.     else if ( type == 't' && ! regTime.test ( value ) && !regTimeHTML.test( value )  )
  713.     {
  714.         if (value.length > 0)
  715.             alert ( L_BadTime );
  716.         return false;
  717.     }
  718.  
  719.     //by default let it go...
  720.     return true;
  721. }
  722.  
  723. function promptengine_checkRangeBoundValue (
  724.     value,
  725.     type )
  726. {
  727.     if (value == null || value.length == 0)
  728.         return false;
  729.         
  730.     return promptengine_checkValue(value, type);    
  731. }
  732.  
  733. function promptengine_isSubmitEvent(evt)
  734. {
  735.   if (isNetscape)
  736.   {
  737.     if (evt.which == ENTER_KEY && (evt.target.type == "text" || evt.target.type == "password"))
  738.         return true;
  739.   }
  740.   else
  741.   {
  742.     if (window.event.keyCode == ENTER_KEY && (window.event.srcElement.type == "text" || window.event.srcElement.type == "password"))
  743.         return true;
  744.   }
  745.  
  746.   return false;
  747. }
  748.  
  749. function promptengine_isEnterKey(evt)
  750. {
  751.   if (isNetscape)
  752.   {
  753.     if (evt.which == ENTER_KEY && evt.target.tagName.toLowerCase() != "a")
  754.         return true;
  755.   }
  756.   else
  757.   {
  758.     if (window.event.keyCode == ENTER_KEY && window.event.srcElement.tagName.toLowerCase() != "a")
  759.         return true;
  760.   }
  761. }
  762.  
  763. //This function should only be called from the COM components.
  764. //Use encodeURIComponent for Java
  765. function promptengine_urlEncode(strToBeEncoded)
  766. {
  767.     var encodedString = new String("");
  768.     for( var i = 0; i < strToBeEncoded.length; i++ )
  769.     {
  770.         var nextChar = strToBeEncoded.charAt(i);
  771.         switch( nextChar )
  772.         {
  773.             //Unsafe characters
  774.             case '%':
  775.             {
  776.                 encodedString += "%25";
  777.                 break;
  778.             }
  779.             case '+':
  780.             {
  781.                 encodedString += "%2B";
  782.                 break;
  783.             }
  784.             case ' ':
  785.             {
  786.                 encodedString += "%20";
  787.                 break;
  788.             }
  789.             case '<':
  790.             {
  791.                 encodedString += "%3C";
  792.                 break;
  793.             }
  794.             case '>':
  795.             {
  796.                 encodedString += "%3E";
  797.                 break;
  798.             }
  799.             case '"':
  800.             {
  801.                 encodedString += "%22";
  802.                 break;
  803.             }
  804.             case '\'':
  805.             {
  806.                 encodedString += "%27";
  807.                 break;
  808.             }
  809.             case '#':
  810.             {
  811.                 encodedString += "%23";
  812.                 break;
  813.             }
  814.             case '{':
  815.             {
  816.                 encodedString += "%7B";
  817.                 break;
  818.             }
  819.             case '}':
  820.             {
  821.                 encodedString += "%7D";
  822.                 break;
  823.             }
  824.             case '|':
  825.             {
  826.                 encodedString += "%7C";
  827.                 break;
  828.             }
  829.             case '\\':
  830.             {
  831.                 encodedString += "%5C";
  832.                 break;
  833.             }
  834.             case '^':
  835.             {
  836.                 encodedString += "%5E";
  837.                 break;
  838.             }
  839.             case '~':
  840.             {
  841.                 encodedString += "%7E";
  842.                 break;
  843.             }
  844.             case '`':
  845.             {
  846.                 encodedString += "%60";
  847.                 break;
  848.             }
  849.             case '[':
  850.             {
  851.                 encodedString += "%5B";
  852.                 break;
  853.             }
  854.             case ']':
  855.             {
  856.                 encodedString += "%5D";
  857.                 break;
  858.             }
  859.             //Reserved characters
  860.             case ';':
  861.             {
  862.                 encodedString += "%3B";
  863.                 break;
  864.             }
  865.             case '/':
  866.             {
  867.                 encodedString += "%2F";
  868.                 break;
  869.             }
  870.             case '?':
  871.             {
  872.                 encodedString += "%3F";
  873.                 break;
  874.             }
  875.             case ':':
  876.             {
  877.                 encodedString += "%3A";
  878.                 break;
  879.             }
  880.             case '@':
  881.             {
  882.                 encodedString += "%40";
  883.                 break;
  884.             }
  885.             case '=':
  886.             {
  887.                 encodedString += "%3D";
  888.                 break;
  889.             }
  890.             case '&':
  891.             {
  892.                 encodedString += "%26";
  893.                 break;
  894.             }
  895.             default:
  896.             {
  897.                 encodedString += nextChar;
  898.                 break;
  899.             }
  900.         }
  901.     }
  902.  
  903.     return encodedString;
  904. }
  905.  
  906. function promptengine_CancelRightClick(evt)
  907. {
  908.     if (isNetscape)
  909.     {
  910.         if (evt.target.type != "text" && evt.target.type != "textarea")
  911.         {
  912.                 evt.preventDefault();
  913.                 evt.cancelBubble = true;
  914.                 return true;
  915.         }
  916.     }
  917.     else
  918.     {
  919.         if (window.event.srcElement.type != "text" && window.event.srcElement.type != "textarea")
  920.         {
  921.                 window.event.cancelBubble = true;
  922.                 window.event.returnValue = false;
  923.         }
  924.     }
  925. }
  926.  
  927. function promptengine_showHidePromptByKey(fieldSetId, imgId, currentImgPath, changeImgPath, evt)
  928. {
  929.     var correctKey = false;
  930.     var fieldSet = document.getElementById(fieldSetId);
  931.     
  932.     if (fieldSet == null)
  933.         return;
  934.  
  935.     if (isNetscape)
  936.     {
  937.         if ( (evt.which == LEFT_ARROW_KEY && fieldSet.style.display == "") || 
  938.             (evt.which == RIGHT_ARROW_KEY && fieldSet.style.display == "none") )
  939.                 correctKey = true;
  940.     }
  941.     else
  942.     {
  943.         if ( (window.event.keyCode == LEFT_ARROW_KEY && fieldSet.style.display == "") || 
  944.             (window.event.keyCode == RIGHT_ARROW_KEY && fieldSet.style.display == "none") )
  945.                 correctKey = true;
  946.     }
  947.  
  948.     if (correctKey == true)
  949.         promptengine_showHidePrompt(fieldSetId, imgId, currentImgPath, changeImgPath, evt)
  950. }
  951.  
  952. function promptengine_showHidePrompt(fieldSetId, imgId, currentImgPath, changeImgPath, evt)
  953. {
  954.     var imgElem;    
  955.     imgElem = document.getElementById(imgId);
  956.  
  957.     if (imgElem!= null && fieldSetId != null)
  958.     {
  959.         if (!imgElem.origImage)
  960.             imgElem.origImage = imgElem.src;    
  961.  
  962.         var fieldSet = document.getElementById(fieldSetId);
  963.         if (fieldSet != null)
  964.         {
  965.             if (fieldSet.style.display == "")
  966.                 fieldSet.style.display = "none";
  967.             else
  968.                 fieldSet.style.display = "";
  969.  
  970.             if (!imgElem.changed || imgElem.changed == false)
  971.             {
  972.                 imgElem.src = changeImgPath;
  973.                 imgElem.changed = true;
  974.             }
  975.             else
  976.             {
  977.                 imgElem.src = currentImgPath;
  978.                 imgElem.changed = false;
  979.             }
  980.         }
  981.     }
  982. }
  983.  
  984. function promptengine_scrollTo(elt)
  985. {
  986.     if (!elt) return; 
  987.     
  988.     var offsetTop = elt.offsetTop; 
  989.     if (!offsetTop) return;
  990.     
  991.     var myOffsetParent = elt.offsetParent; 
  992.     while( myOffsetParent )     
  993.     { 
  994.         offsetTop += myOffsetParent.offsetTop; 
  995.         myOffsetParent = myOffsetParent.offsetParent; 
  996.     }  
  997.     
  998.     window.scrollTo(0, offsetTop);
  999. }
  1000.